package reflect.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * JAVA提供了很多元注解
 * @Target 用来说明当前注解可以被应用的位置,不指定时当前注解可以被应用在任何注解可用的地方
 *         位置使用ElementType来指定,常见的值:
 *         ElementType.TYPE:在类上可以使用
 *         ElementType.METHOD:在方法上可以使用
 *         ElementType.CONSTRUCTOR:在构造器上可以使用
 *         ElementType.Field:在属性上可以使用
 *         ...
 *         例如:
 *         @Target(ElementType.TYPE)
 *         当前注解仅能在类上使用
 *
 *         @Target({ElementType.TYPE,ElementType.METHOD})
 *         两个以上位置同时可用时要以数组形式表达
 *
 * @Retention 用于指定当前注解的保留级别
 *            保留级别有三个,使用RetentionPolicy表示:
 *            RetentionPolicy.SOURCE  当前注解仅保留在源代码中
 *            RetentionPolicy.CLASS   当前注解保留在字节码文件中,但不可被反射机制访问(不指定时的默认保留级别)
 *            RetentionPolicy.RUNTIME 当前注解保留在字节码文件中且可以被反射机制访问
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {

}
